package app

import (
	"fmt"
	"github.com/go-redis/redis"
	"github.com/spf13/viper"
	"time"
)

// redis缓存key
const (
	RedisCache = "go-websocket"
	// 用户列表缓存
	UserListCache = RedisCache + ":userList"
	// 消息列表缓存
	MsgListCache = RedisCache + ":msgList"
)

var (
	Config       *viper.Viper
	HTTPPort     int
	ReadTimeout  time.Duration
	WriteTimeout time.Duration
	RedisConn    *redis.Client
	Qrssx        int64 // 每个群群人数上限
	Qxxsx        int64 // 每个群保留的群消息上限
)

func InitConfig() (*viper.Viper, error) {
	viper.SetConfigName("application") // 配置文件的文件名（不带扩展名）
	viper.SetConfigType("yaml")        // 配置文件的类型
	//viper.AddConfigPath("./app.common.config")    // 配置文件所在的路径，这里假设配置文件在项目根目录下的 app.common.config 文件夹中
	viper.AddConfigPath("./")   // 配置文件所在的路径，项目根目录下
	err := viper.ReadInConfig() // 读取配置文件
	if err != nil {
		return nil, err
	}
	Config = viper.GetViper()
	LoadServer()
	LoadRedis()
	fmt.Println(RedisConn, "Redis连接成功！")
	return Config, nil
}

func LoadServer() {
	HTTPPort = Config.GetInt("server.port")
	ReadTimeout = time.Duration(Config.GetInt("server.read_timeout")) * time.Second
	WriteTimeout = time.Duration(Config.GetInt("server.write_timeout")) * time.Second
	Qrssx = Config.GetInt64("max.qrssx")
	Qxxsx = Config.GetInt64("max.qxxsx")
}

func LoadRedis() {
	RedisConn = redis.NewClient(&redis.Options{
		Addr:     fmt.Sprintf("%s:%d", Config.Get("redis.host"), Config.GetInt("redis.port")),
		Password: Config.GetString("redis.password"),
	})
	if err := RedisConn.Ping().Err(); err != nil {
		fmt.Println("无法连接到redis")
	}
}
